package com.sloth.bear.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.convert.DataSizeUnit;
import org.springframework.stereotype.Component;
import org.springframework.util.unit.DataSize;
import org.springframework.util.unit.DataUnit;

import java.util.List;

/**
 * 文件管理配置属性
 */
@Data
@Component
@ConfigurationProperties(prefix = "file-manager")
public class FileManagerProperties {

    /**
     * 是否启用
     */
    private Boolean isEnable;
    
    /**
     * 扫描配置
     */
    private Scan scan = new Scan();
    
    /**
     * 缓存配置
     */
    private Cache cache = new Cache();
    
    @Data
    public static class Scan {
        /**
         * 扫描目录列表
         */
        private List<String> directories;

        /**
         * 文件大小阈值
         */
        @DataSizeUnit(DataUnit.BYTES)
        private DataSize fileSizeThreshold = DataSize.ofMegabytes(256);

        /**
         * 支持的文件格式
         */
        private List<String> supportedFormats;

        /**
         * 是否启用定时扫描
         * 默认为 true，启用定时扫描
         * 如果设为 false，只依赖文件监控和手动触发扫描
         */
        private Boolean enableScheduledScan = true;

        /**
         * 首次扫描延迟（秒）
         * 启动后等待此时间再执行首次扫描
         * 默认 300 秒 = 5 分钟
         * 设置为 0 表示立即执行
         */
        private Integer initialDelay = 300;

        /**
         * 扫描间隔（秒）
         * 每次扫描完成后等待此时间再执行下次扫描
         * 默认 3600 秒 = 1 小时
         */
        private Integer scanInterval = 3600;

        /**
         * 是否启用文件删除监控
         * 默认为 false，不监控删除事件
         * 注意：外部磁盘（如移动硬盘）断开连接时会触发大量删除事件
         */
        private Boolean enableDeleteWatch = false;
    }
    
    @Data
    public static class Cache {
        /**
         * 缓存过期时间（秒）
         */
        private Integer expiration = 7200;
    }
}